JSON Data এর Integrity এবং Consistency নিশ্চিত করা

Java Technologies - জ্যাকসন (Jackson) - JSON Schema Validation
218

JSON ডেটার Integrity এবং Consistency নিশ্চিত করা মানে হল ডেটা সঠিক, নির্ভরযোগ্য, এবং পূর্বনির্ধারিত কাঠামো বা নিয়ম অনুসারে বৈধ কিনা তা যাচাই করা। Jackson লাইব্রেরি JSON serialization এবং deserialization-এ গুরুত্বপূর্ণ ভূমিকা পালন করে এবং ডেটার মান যাচাই করার বিভিন্ন উপায় সরবরাহ করে।


JSON Data-এর Integrity এবং Consistency নিশ্চিত করার উদ্দেশ্য

  1. ডেটা ভ্যালিডেশন: নিশ্চিত করা যে JSON ডেটার কাঠামো এবং মান সঠিক।
  2. ডেটা নিরাপত্তা: JSON ডেটার মাধ্যমে অনাকাঙ্ক্ষিত পরিবর্তন বা ত্রুটি প্রতিরোধ।
  3. Error Handling: ডেটার ত্রুটি সনাক্ত এবং যথাযথ ত্রুটি বার্তা প্রদান।
  4. API Integration: ভিন্ন সিস্টেম থেকে প্রাপ্ত ডেটার বৈধতা পরীক্ষা।

Jackson ব্যবহার করে JSON Data Integrity এবং Consistency নিশ্চিত করার পদ্ধতি

1. Java Bean Validation (JSR 380)

Java Bean Validation annotations (@NotNull, @Size, @Pattern, ইত্যাদি) ব্যবহার করে ডেটা ভ্যালিডেশন করা সম্ভব।

উদাহরণ:

import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;

public class User {
    @NotNull(message = "Name cannot be null")
    @Size(min = 2, max = 50, message = "Name must be between 2 and 50 characters")
    private String name;

    @NotNull(message = "Email cannot be null")
    @Pattern(regexp = ".+@.+\\..+", message = "Invalid email format")
    private String email;

    // Getters and Setters
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}

Validation Integration:

import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;

public class DataIntegrityExample {
    public static void main(String[] args) {
        try {
            String json = """
                          {
                              "name": "John",
                              "email": "invalid-email"
                          }
                          """;

            ObjectMapper mapper = new ObjectMapper();
            User user = mapper.readValue(json, User.class);

            // Validator তৈরি
            ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
            Validator validator = factory.getValidator();

            var violations = validator.validate(user);
            if (!violations.isEmpty()) {
                violations.forEach(violation -> System.out.println(violation.getMessage()));
            } else {
                System.out.println("Valid User: " + user.getName());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

আউটপুট:

Invalid email format

2. Custom Deserialization দিয়ে Integrity নিশ্চিত করা

কাস্টম deserializer ব্যবহার করে JSON ডেটার integrity যাচাই করা যায়।

উদাহরণ:

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

import java.io.IOException;

class Product {
    private String name;

    @JsonDeserialize(using = PriceDeserializer.class)
    private double price;

    // Getters and Setters
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public double getPrice() { return price; }
    public void setPrice(double price) { this.price = price; }
}

class PriceDeserializer extends JsonDeserializer<Double> {
    @Override
    public Double deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        double price = p.getDoubleValue();
        if (price < 0) {
            throw new IOException("Price cannot be negative: " + price);
        }
        return price;
    }
}

ব্যবহার:

public class CustomDeserializerExample {
    public static void main(String[] args) {
        try {
            String json = """
                          {
                              "name": "Smartphone",
                              "price": -100.50
                          }
                          """;

            ObjectMapper mapper = new ObjectMapper();
            Product product = mapper.readValue(json, Product.class);

            System.out.println("Product: " + product.getName() + ", Price: " + product.getPrice());
        } catch (Exception e) {
            System.err.println("Validation Error: " + e.getMessage());
        }
    }
}

আউটপুট:

Validation Error: Price cannot be negative: -100.5

3. Schema Validation

JSON Schema ব্যবহার করে ডেটার কাঠামো এবং মান যাচাই করা যায়।

Dependency (NetworkNT JSON Schema Validator):

<dependency>
    <groupId>com.github.java-json-tools</groupId>
    <artifactId>json-schema-validator</artifactId>
    <version>2.2.14</version>
</dependency>

উদাহরণ:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.fge.jsonschema.core.report.ProcessingReport;
import com.github.fge.jsonschema.main.JsonSchema;
import com.github.fge.jsonschema.main.JsonSchemaFactory;

public class SchemaValidationExample {
    public static void main(String[] args) {
        try {
            String schemaJson = """
                                 {
                                     "$schema": "http://json-schema.org/draft-07/schema#",
                                     "type": "object",
                                     "properties": {
                                         "name": {
                                             "type": "string"
                                         },
                                         "age": {
                                             "type": "integer",
                                             "minimum": 18
                                         }
                                     },
                                     "required": ["name", "age"]
                                 }
                                 """;

            String jsonData = """
                              {
                                  "name": "John",
                                  "age": 17
                              }
                              """;

            ObjectMapper mapper = new ObjectMapper();
            JsonNode schemaNode = mapper.readTree(schemaJson);
            JsonNode dataNode = mapper.readTree(jsonData);

            JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
            JsonSchema schema = factory.getJsonSchema(schemaNode);

            ProcessingReport report = schema.validate(dataNode);

            if (report.isSuccess()) {
                System.out.println("JSON Data is valid.");
            } else {
                System.out.println("Validation Errors:");
                System.out.println(report);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

আউটপুট:

Validation Errors:
error: instance failed to match at least one required condition
    required property "age" is missing

4. Nested Validation

Nested JSON ডেটার consistency নিশ্চিত করতে @Valid annotations ব্যবহার করা যায়।

উদাহরণ:

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;

public class Order {
    @NotNull
    private String orderId;

    @Valid
    @NotNull
    private Product product;

    // Getters and Setters
    public String getOrderId() { return orderId; }
    public void setOrderId(String orderId) { this.orderId = orderId; }

    public Product getProduct() { return product; }
    public void setProduct(Product product) { this.product = product; }
}

Jackson এবং Java Bean Validation ব্যবহার করে JSON Data-এর Integrity এবং Consistency নিশ্চিত করার জন্য:

  1. Basic Validation: @NotNull, @Size, @Pattern annotations ব্যবহার করুন।
  2. Custom Rules: Custom deserializer দিয়ে validation করুন।
  3. Schema Validation: JSON Schema-এর মাধ্যমে কাঠামো যাচাই করুন।
  4. Nested Data: Nested objects-এর জন্য @Valid annotations প্রয়োগ করুন।

এই কৌশলগুলো ব্যবহার করে আপনি JSON ডেটার সঠিকতা এবং নির্ভরযোগ্যতা নিশ্চিত করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...